﻿using UnityEngine;

// 基本游戏物体
public class BaseGameObject: MonoBehaviour {
    // 移动结果
    public enum MoveResult {
        CANNOT_MOVE,        // 本身不具有移动能力
        NO_MOVE,            // 没有移动
        NORMAL_MOVED,       // 正常移动
        ARRIVED_ON_DEST,    // 移动到目标上
        LEFT_FROM_DEST      // 离开目标
    }

    // 类型
    public enum Type {
        NOTHING,        // 什么也没有
        WALL,           // 墙
        BACKGROUND,     // 背景
        DESTINATION,    // 箱子的目的地
        BOX,            // 箱子
        MAN             // 小人
    }

    protected Sprite mImage;    // 图片
    public Type type;           // 类型

    /**
     * 获取游戏物体上挂载的基本游戏物体。
     * @param go    游戏物体
     * @return 基本游戏物体
     */
    protected BaseGameObject Get(GameObject go) {
        BaseGameObject baseGameObject = go.GetComponent<Box>();
        if (baseGameObject == null) {
            baseGameObject = go.GetComponent<BaseGameObject>();
        }
        return baseGameObject;
    }

    /**
     * 移动。
     * @param direction     方向
     * @param moveResult    移动结果
     * @return 被推动的箱子
     */
    public virtual BaseGameObject Move(KeyCode direction, ref MoveResult moveResult) {
        moveResult = MoveResult.CANNOT_MOVE;
        return null;
    }

    /**
     * 开始。
     */
    protected void Start() {
        // 加载图片
        string imageFilePath = string.Format(Const.IMAGE_FILE_PATH, (int)type);
        mImage = Resources.Load<Sprite>(imageFilePath);
    }
}
